#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>

// 用标准IO实现文件拷贝

int main(int argc, char const *argv[]) // ./copy  a.txt  b.txt
{
    // 0. 检查参数
    if(argc != 3)
    {
        printf("Usage: %s <src> <dst>\n", argv[0]);
        return 1;
    }

    // 1. 只读打开源文件、只写目标文件（若不存在则创建，若存在则清空）
    FILE *fp1 = fopen(argv[1], "r");
    FILE *fp2 = fopen(argv[2], "w");
    if(fp1 == NULL || fp2 == NULL)
    {
        perror("打开文件失败");
        return -1;
    }

    // 2. 循环读取源文件并放入目标文件
    while(1)
    {
        // 读取源文件
        // 只能处理文本
        int a;
        char buf[20];
        float f;
        if(fscanf(fp1, "%d%s%f", &a, buf, &f) == EOF)  // 按格式
        {
            if(feof(fp1))
            {
                printf("拷贝完毕!\n");
                break;
            }
            if(ferror(fp1))
            {
                perror("读取文件失败");
                return -1;
            }
        }

        // 写入目标文件
        fprintf(fp2, "%d\n%s\n%f\n\n", a, buf, f);
    }

    // 3. 释放资源
    fclose(fp1);
    fclose(fp2);

    return 0;
}
